根據我API的設計,比如讓使用者新增寶可夢、判斷寶可夢是否能夠進化, 這些資料可以選擇使用第三方的資料、也可以自己手動輸入,而我是選擇前者。
主要取得資料的網站,我是透過向https://pokeapi.co/docs/v2#pokemon-species該網站, 發請求拿到資料, 他有提供很多的api,主要分成幾個大項:
而我主要是從Pokemon這裡取得寶可夢種族的名稱、技能、照片,然後從Evolution chain拿到進化等級。
向他的api發送請求可能回來的數據像是這樣:
{
"count": 1292,
"next": "https://pokeapi.co/api/v2/pokemon/?offset=20&limit=20",
"previous": null,
"results": [
{
"name": "bulbasaur",
"url": "https://pokeapi.co/api/v2/pokemon/1/"
},
{
"name": "ivysaur",
"url": "https://pokeapi.co/api/v2/pokemon/2/"
},
{
"name": "venusaur",
"url": "https://pokeapi.co/api/v2/pokemon/3/"
},
{
"name": "charmander",
"url": "https://pokeapi.co/api/v2/pokemon/4/"
},
{
"name": "charmeleon",
"url": "https://pokeapi.co/api/v2/pokemon/5/"
},
{
"name": "charizard",
"url": "https://pokeapi.co/api/v2/pokemon/6/"
},
{
"name": "squirtle",
"url": "https://pokeapi.co/api/v2/pokemon/7/"
},
有些必須要去了解他回傳的資料格式才能取得資料,比如說進化等級就是一個多維的json格式(後面會再詳細解釋)。
這些資料我是要透過一開始存到自己的資料庫,還是就在每次使用者打我們的API,這些相關的資訊我們都在去打對方的API來拿到? 以下是這兩種方法的一些比較:
優點:
依賴性較低:
好處是我不用太依賴於對方的網站的維護情況,只要他不完全關掉。
客制化:可以根據需要更加客制化數據庫,添加或修改資訊,更好地整合到應用中。
比如說我的種族名稱跟種族進化等級他是不同api取得的資料,既然都是種族資訊,我就可以把它整合到我同一張資料表中。
缺點:
一開始耗時費工:
一開始的建立可能會比較麻煩、耗時,因為一次建立需要打多次api,怎麼樣去發這些請求是一個問題。
儲存空間的浪費:
當然以我目前的專案感受不出來, 因為資料量還不是很多, 但如果今天資料量很大, 這有可能會是一個問題。
更新問題:
如果來源網站更新了資料,需要一個機制來更新本地資料庫。如果不定期更新資料庫,可能會提供過時的信息。
優點
我不用考慮一次性發大量請求的問題。
不會有佔用自己空間的問題。
即時性:
即時從API取得數據可以保證提供的數據是最新的,不需要擔心數據過時的問題。
缺點
這兩種方式我相信在實際情況都有可能會應用到,雖然目前經驗的問題還沒有辦法具體的描述應用場景,所以就先根據各自的優缺點做了一點比較,因為整個取資料的過程及改善比較多內容,所以我打算在接下來的篇章在跟大家分享。